package com.hd.trans.network.apiService;


import com.hd.trans.network.bean.trans.BaseResponse;
import com.hd.trans.network.bean.trans.MessageRes;
import com.hd.trans.network.bean.trans.QueryTaskStatus;
import com.hd.trans.network.bean.trans.TextTransNewReq;
import com.hd.trans.network.bean.trans.TextTransNewRes;
import com.hd.trans.network.bean.trans.TextTransReq;
import com.hd.trans.network.bean.trans.TextTransRes;
import com.hd.trans.network.bean.trans.UploadTaskStatus;

import io.reactivex.Observable;
import retrofit2.Call;
import retrofit2.http.Body;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;

public interface TransitionNewApi {

    /**
     * 创建任务
     */
    @GET("task_create")
    Call<String> createTask();

    /**
     * 上传
     */
    @FormUrlEncoded
    @POST("task_upload")
    Observable<BaseResponse<UploadTaskStatus>> uploadTask(
            @Field("fromLang") String fromLang,
            @Field("toLang") String toLang,
            @Field("taskId") String taskId,
            @Field("fileName") String fileName,
            @Field("data") String data,
            @Field("isBigFile") boolean isBigFile
    );
    /**
     * 参数(必须): fromLang 源语言
     * 参数(必须): toLang 目标语言
     * 参数(必须): taskId 任务ID, 由/task_create获取
     * 参数(必须): fileName 文件名
     * 参数(必须): isBigFile 是否为大文件，默认为false。
     * 参数(可选): productId 产品ID。
     * 参数(可选): userId 用户ID。
     * 参数(可选): password 文档的密码。目前仅仅支持pdf文件。
     * 上传
     * 更新：
     * 参数(可选): imageTextLayout 图片翻译时，图片内文本的排版方向
     *     auto 自动
     *     h 横向
     *     v 纵向
     * 参数(可选): imageScale 图片翻译时， 对图像进行超分修复的倍数。取值为 1, 2, 3, 4, 8, 16, 32。默认为1， 不超分。
     * 参数(可选): imageFontSize 图片翻译时，图像内的文字的字体大小设置。
     *     0 自动检并设置字体大小
     *     其他自然数。 强制设置为该字体大小。
     * 参数(可选): selectedPages 选定翻译页面。目前支持pdf，pptx的选页翻译，其他的文件暂不支持。
     * selectedPages 为空或者all时, 翻译全部页面
     * selectedPages 为逗号分隔的数字时,翻译指定页面, 例如 “0,1,5,8,10,100”
     */
    @FormUrlEncoded
    @POST("task_upload")
    Observable<BaseResponse<UploadTaskStatus>> uploadTaskNew(
            @Field("fromLang") String fromLang,
            @Field("toLang") String toLang,
            @Field("taskId") String taskId,
            @Field("fileName") String fileName,
            @Field("data") String data,
            @Field("imageTextLayout") String imageTextLayout,
            @Field("imageScale") int imageScale,
            @Field("imageFontSize") int imageFontSize,
            @Field("isBigFile") boolean isBigFile,
            @Field("productId") int productId,
            @Field("userId") String userId,
            @Field("password") String password
    );

    /**
     * 任务查询
     */
    @GET("task_query")
    Observable<BaseResponse<QueryTaskStatus>> queryTask(@Query("taskId") String taskId);

    /**
     * 任务查询(带排队数量，等候时间预估)
     */
    @GET("task_query_ex")
    Observable<BaseResponse<QueryTaskStatus>> queryTaskEx(@Query("taskId") String taskId);

    /**
     * 上传大文件切片
     * 参数: taskId 任务ID, 由/task_create获取
     * 参数: data 切片数据,base64格式
     */
    @FormUrlEncoded
    @POST("task_bigfile_write")
    Observable<MessageRes> writeBigFileTask(@Field("taskId")String taskId, @Field("data")String data);

    /**
     * 文本翻译：双语对照(旧接口)
     */
    @POST("trans_diff")
    Observable<BaseResponse<TextTransRes>> tansTextDiff(@Body TextTransReq req);

    /**
     * 文本翻译：双语对照(新接口)
     */
    @POST("trans_text")
    Observable<TextTransNewRes> tansText(@Body TextTransNewReq req);

    /**
     * 文本翻译：双语对照(新接口)
     */
    @POST("trans_text_quick")
    Observable<TextTransNewRes> tansTextQuick(@Body TextTransNewReq req);
}
